#ifndef _BEEP_MUSIC_MANAGER_H_
#define _BEEP_MUSIC_MANAGER_H_

#include "./SYSTEM/sys/sys.h"
#include "./BSP/BEEP/beep_music.h"

/* -------------------------------------------- 音乐播放状态定义 -------------------------------------------- */

typedef enum
{
    MUSIC_STATE_IDLE = 0,       /* 空闲状态 */
    MUSIC_STATE_PLAYING,        /* 播放中 */
    MUSIC_STATE_PAUSED,         /* 暂停 */
    MUSIC_STATE_STOPPED         /* 停止 */
} music_state_e;

/* -------------------------------------------- 音乐播放控制结构体 -------------------------------------------- */

typedef struct
{
    const music_note_t *melody;     /* 音符数组指针 */
    uint16_t total_notes;           /* 总音符数 */
    uint16_t current_note;          /* 当前播放的音符索引 */
    uint32_t note_duration;         /* 当前音符持续时间 */
    music_state_e state;            /* 播放状态 */
    uint8_t volume;                 /* 音量 (0-100) */
    uint8_t loop;                   /* 循环播放标志 */
    uint32_t tic;                   /* 当前音符已播放时长，单位ms */
} music_player_t;

/* -------------------------------------------- 音乐播放器ID定义 -------------------------------------------- */

typedef enum
{
    MUSIC_PLAYER_0 = 0,         /* 音乐播放器0 */
    MUSIC_PLAYER_1,             /* 音乐播放器1 */
    MUSIC_PLAYER_2,             /* 音乐播放器2 */

    MUSIC_PLAYER_MAX_NUM        /* 音乐播放器总数 */
} music_player_id_e;

/* -------------------------------------------- 音乐播放控制函数类型定义 -------------------------------------------- */

typedef void (*music_play_func_t)(void);    /* 音乐播放函数类型 */

/* -------------------------------------------- 函数声明 ---------------------------------------------- */

/* 音乐播放器管理函数 */
void FML_MUSIC_Init(void);                      /* 初始化音乐播放器 */
void MUSIC_Scan(uint32_t sysTime);              /* 音乐播放器扫描函数 */

/* 音乐播放控制函数 */
void MUSIC_Play(music_player_id_e player_id, const music_note_t *melody, uint16_t note_count, uint8_t volume, uint8_t loop);
void MUSIC_Stop(music_player_id_e player_id);
void MUSIC_Pause(music_player_id_e player_id);
void MUSIC_Resume(music_player_id_e player_id);

/* 音乐播放状态查询函数 */
music_state_e MUSIC_GetState(music_player_id_e player_id);
uint8_t MUSIC_IsPlaying(music_player_id_e player_id);

/* 预设音乐播放函数 */
void MUSIC_PlayHappyBirthday(music_player_id_e player_id, uint8_t volume);
void MUSIC_PlayWindRise(music_player_id_e player_id, uint8_t volume);

#endif 
